/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package caintra.Sapra.Pantalla.Ajuste;

import caintra.Sapra.Model.Facturaajuste;
import java.text.DecimalFormat;
import java.util.List;
import nextapp.echo2.app.Color;
import nextapp.echo2.app.event.ActionEvent;
import nextapp.echo2.app.event.ActionListener;
import nextapp.echo2.app.table.DefaultTableModel;

/**
 *
 * @author Administrador
 */
public class AjusteController implements ActionListener {

    AjusteView ajusteview;
    AjusteQuery query = new AjusteQuery();
    List<Facturaajuste> lista_ajuste;
    public final boolean Admin = true;
    public final boolean no_Admin = false;
    public boolean tipoUsuario;

    public AjusteController(AjusteView ajusteview) {
        try {
            this.ajusteview = ajusteview;
            if (ajusteview.usuario.getTipoUsuario().equals("A")) {
                tipoUsuario = true;
            } else {
                tipoUsuario = false;
            }
            action();

        } catch (Exception e) {
        }
    }

    public void action() {
        try {
            ajusteview.radio_dias.setSelected(false);
            ajusteview.radio_monto.setSelected(false);
            ajusteview.radio_agrega.setSelected(false);
            ajusteview.radio_descuenta.setSelected(false);
            ajusteview.radio_dias.addActionListener(this);
            ajusteview.radio_monto.addActionListener(this);
            ajusteview.radio_agrega.addActionListener(this);
            ajusteview.radio_descuenta.addActionListener(this);
            ajusteview.txt_dias.setEnabled(false);
            ajusteview.txt_monto.setEnabled(false);
            ajusteview.label_error.setVisible(false);
            ajusteview.label_error_tabla.setVisible(false);
            ajusteview.boton_guardar.addActionListener(this);
            ajusteview.boton_limpiar.addActionListener(this);
            ajusteview.Eliminar_Ajuste.addActionListener(this);
            ajusteview.Salir_ajuste.addActionListener(this);
            ajusteview.label_nombre.setText("" + ajusteview.label_nombre.getText() + ": " + ajusteview.p.getNombre()
                    + " " + ajusteview.p.getPaterno() + " " + ajusteview.p.getMaterno());
            ajusteview.periodo1.addActionListener(this);
            ajusteview.periodo2.addActionListener(this);

            if (ajusteview.prefqm == null) {
                ajusteview.periodo1.setVisible(false);
                ajusteview.periodo2.setVisible(false);
                ajusteview.sel_per.setVisible(false);
            } else {
                ajusteview.periodo1.setVisible(true);
                ajusteview.periodo2.setVisible(true);
                ajusteview.sel_per.setVisible(true);
            }
            paint_table();
        } catch (Exception e) {
        }

    }

    public void radioDias() {
        try {
            if (ajusteview.radio_dias.isSelected()) {
                ajusteview.radio_monto.setSelected(false);
                ajusteview.txt_dias.setText("");
                ajusteview.txt_monto.setText("");
                ajusteview.txt_dias.setEnabled(true);
            } else {
                ajusteview.txt_dias.setText("");
                ajusteview.txt_dias.setEnabled(false);
                ajusteview.txt_monto.setEnabled(false);
            }
        } catch (Exception e) {
        }
    }

    public void radioMonto() {
        try {
            if (ajusteview.radio_monto.isSelected()) {
                ajusteview.radio_dias.setSelected(false);
                ajusteview.txt_monto.setText("");
                ajusteview.txt_dias.setText("");
                ajusteview.txt_monto.setEnabled(true);
            } else {
                ajusteview.txt_monto.setText("");
                ajusteview.txt_dias.setEnabled(false);
                ajusteview.txt_monto.setEnabled(false);
            }
        } catch (Exception e) {
        }
    }

    public void Guardar() {
        try {
            boolean back;
            ajusteview.label_error.setForeground(Color.RED);
            Facturaajuste fa = validacion();
            if (fa != null) {
                back = query.insertAjuste(fa);
                resetForm();
                ajusteview.label_error.setVisible(true);
                if (back) {
                    ajusteview.label_error.setText("- Registro Guardado Correctamente");
                    ajusteview.label_error.setForeground(Color.GREEN);
                    ajusteview.Eliminar_Ajuste.setVisible(true);

                    paint_table();
                } else {
                    ajusteview.label_error.setText("- Error en la Insercion");
                    ajusteview.label_error.setForeground(Color.RED);

                }
            }
        } catch (Exception e) {
        }
    }

    public void Eliminar() {
        int index = this.ajusteview.table_caintra.getSelectionModel().getMinSelectedIndex();
        boolean value = true;
        try {
            ajusteview.label_error_tabla.setForeground(Color.RED);
            ajusteview.label_error_tabla.setVisible(true);
            if (index >= 0) {
                Facturaajuste f = (Facturaajuste) lista_ajuste.get(index);




                if (f.isInterno() && tipoUsuario == no_Admin) {//si es deduccion y no es administrador
                    this.ajusteview.table_caintra.getSelectionModel().clearSelection();
                    ajusteview.label_error_tabla.setForeground(Color.RED);
                    ajusteview.label_error_tabla.setText("- Eliminar Este Movimiento No Es Valido Para Este Tipo De Usuario");
                    return;
                }
                if (tipoUsuario == no_Admin && f.isInterno() == false) {// es ajuste y no es administrador
                    if (f.getFk_usuarioId() == 1) {
                        this.ajusteview.table_caintra.getSelectionModel().clearSelection();
                        ajusteview.label_error_tabla.setForeground(Color.RED);
                        ajusteview.label_error_tabla.setText("- Contacte a su Administrador para Eliminar el Retroactivo");
                        return;
                    }

                }
                value = query.deleteAjuste(f.getAjusteid());
                if (value) {
                    ajusteview.label_error_tabla.setForeground(Color.GREEN);
                    ajusteview.label_error_tabla.setText("- Movimiento Eliminado Correctamente");
                    this.ajusteview.table_caintra.setModel(new DefaultTableModel());
                    this.ajusteview.table_caintra.getSelectionModel().clearSelection();
                    this.ajusteview.table_caintra.removeAll();
                    paint_table();

                } else {
                    this.ajusteview.table_caintra.getSelectionModel().clearSelection();
                    ajusteview.label_error_tabla.setForeground(Color.RED);
                    ajusteview.label_error_tabla.setText("- Error Al Intentar Eliminar Movimiento");
                }

            } else {
                this.ajusteview.table_caintra.getSelectionModel().clearSelection();
                ajusteview.label_error_tabla.setForeground(Color.RED);
                ajusteview.label_error_tabla.setText("- Favor de Seleccionar Un Movimiento");

            }

        } catch (Exception exc) {
        }

    }

    public void actionPerformed(ActionEvent e) {
        try {
            if (e.getActionCommand().equals("Dias")) {
                try {
                    radioDias();
                } catch (Exception exc) {
                }
            }
            if (e.getActionCommand().equals("Monto")) {
                try {
                    radioMonto();
                } catch (Exception exc) {
                }
            }
            if (e.getActionCommand().equals("Agregar")) {
                try {
                    if (ajusteview.radio_agrega.isSelected()) {
                        ajusteview.radio_descuenta.setSelected(false);
                    }
                } catch (Exception exc) {
                }
            }
            if (e.getActionCommand().equals("Descontar")) {
                try {
                    if (ajusteview.radio_descuenta.isSelected()) {
                        ajusteview.radio_agrega.setSelected(false);
                    }
                } catch (Exception exc) {
                }
            }

            if (e.getActionCommand().equals("per1")) {
                try {
                    if (ajusteview.periodo1.isSelected()) {
                        ajusteview.periodo2.setSelected(false);
                    }
                } catch (Exception exc) {
                }
            }
            if (e.getActionCommand().equals("per2")) {
                try {
                    if (ajusteview.periodo2.isSelected()) {
                        ajusteview.periodo1.setSelected(false);
                    }
                } catch (Exception exc) {
                }
            }


            if (e.getActionCommand().equals("label_guardar")) {
                try {
                    Guardar();

                } catch (Exception exc) {
                }
            }
            if (e.getActionCommand().equals("label_limpiar")) {
                try {
                    resetForm();

                } catch (Exception exc) {
                }
            }
            if (e.getActionCommand().equals("salir")) {
                try {
                    if (this.ajusteview.bandera == false) {
                        this.ajusteview.prefactura.vista.window_detail.setModal(false);
                        this.ajusteview.prefactura.vista.window_detail.setVisible(false);

                        this.ajusteview.prefactura.vista.window_detail.removeAll();
                        this.ajusteview.prefactura.vista.prac_tab.removeAll();
                        this.ajusteview.prefactura.refreshTabla();
                    } else {
                        if(this.ajusteview.prefqm.per==1){
                        this.ajusteview.prefqm.vista.window_detail.setModal(false);
                        this.ajusteview.prefqm.vista.window_detail.setVisible(false);
                        this.ajusteview.prefqm.vista.window_detail.removeAll();
                        this.ajusteview.prefqm.vista.prac_tab.removeAll();
                        this.ajusteview.prefqm.vista.window_pref_per.setEnabled(true);
                        this.ajusteview.prefqm.establecerPer1();

                        }
                        if(this.ajusteview.prefqm.per==2){
                        this.ajusteview.prefqm.vista.window_detail.setModal(false);
                        this.ajusteview.prefqm.vista.window_detail.setVisible(false);
                        this.ajusteview.prefqm.vista.window_detail.removeAll();
                        this.ajusteview.prefqm.vista.prac_tab2.removeAll();
                        this.ajusteview.prefqm.vista.window_pref_per.setEnabled(true);
                        this.ajusteview.prefqm.establecerPer2();
                        }
                    }

                } catch (Exception exc) {
                    System.out.println(exc.getMessage());
                }
            }
            if (e.getActionCommand().equals("label_Eliminar")) {
                Eliminar();
            }
        } catch (Exception exc) {

        }
    }

    public void paint_table() {
        try {
            if(ajusteview.prefqm==null){
            if (this.ajusteview.Lista_Detalle != null || this.ajusteview.Lista_Detalle.size() > 0) {
                lista_ajuste = query.getAjustes(this.ajusteview.periodo.getCalendarioFacturacionPracticantesId(),
                        this.ajusteview.Lista_Detalle, ajusteview.opc_mov);
                if (lista_ajuste != null && lista_ajuste.size() > 0) {
                    this.ajusteview.table_caintra.setLista_Ajuste(lista_ajuste);
                } else {

                    this.ajusteview.Eliminar_Ajuste.setVisible(false);
                    ajusteview.label_error_tabla.setVisible(true);
                    ajusteview.label_error_tabla.setForeground(Color.BLUE);
                    ajusteview.label_error_tabla.setText("- No Existen Movimientos Para Este Practicante");
                }

            }
            }else{
                if(ajusteview.prefqm.per==1){
                    if (this.ajusteview.Lista_Detalle1 != null || this.ajusteview.Lista_Detalle1.size() > 0) {
                lista_ajuste = query.getAjustes(this.ajusteview.per1.getCalendarioFacturacionPracticantesId(),
                        this.ajusteview.Lista_Detalle1, ajusteview.opc_mov);
                if (lista_ajuste != null && lista_ajuste.size() > 0) {
                    this.ajusteview.table_caintra.setLista_Ajuste(lista_ajuste);
                } else {

                    this.ajusteview.Eliminar_Ajuste.setVisible(false);
                    ajusteview.label_error_tabla.setVisible(true);
                    ajusteview.label_error_tabla.setForeground(Color.BLUE);
                    ajusteview.label_error_tabla.setText("- No Existen Movimientos Para Este Practicante");
                }

                }
            }
                if(ajusteview.prefqm.per==2){
                    if (this.ajusteview.Lista_Detalle2 != null || this.ajusteview.Lista_Detalle2.size() > 0) {
                lista_ajuste = query.getAjustes(this.ajusteview.per2.getCalendarioFacturacionPracticantesId(),
                        this.ajusteview.Lista_Detalle2, ajusteview.opc_mov);
                if (lista_ajuste != null && lista_ajuste.size() > 0) {
                    this.ajusteview.table_caintra.setLista_Ajuste(lista_ajuste);
                } else {

                    this.ajusteview.Eliminar_Ajuste.setVisible(false);
                    ajusteview.label_error_tabla.setVisible(true);
                    ajusteview.label_error_tabla.setForeground(Color.BLUE);
                    ajusteview.label_error_tabla.setText("- No Existen Movimientos Para Este Practicante");
                }

                }
            }
            }
        } catch (Exception e) {
        }
    }

    public Facturaajuste validacion() {
        Facturaajuste ajuste;
        String aux;
        int dia_v = -1;
        double monto_v = -1.00;
        try {
            ajuste = new Facturaajuste();
            if (ajusteview.opc_mov == 1) {
                ajuste.setInterno(true);
            } else {
                ajuste.setInterno(false);
            }
            if (this.ajusteview.prefqm != null) {
                if (this.ajusteview.periodo1.isSelected() == true) {
                    if (this.ajusteview.prefqm.fact != null) {
                        ajusteview.label_error.setText("- Periodo autorizado, no se realizan cambios");
                        ajusteview.label_error.setVisible(true);
                        return null;
                    }
                }
                if (this.ajusteview.periodo2.isSelected() == true) {
                    if (this.ajusteview.prefqm.factura != null) {
                        ajusteview.label_error.setText("- Periodo autorizado, no se realizan cambios");
                        ajusteview.label_error.setVisible(true);
                        return null;
                    }
                }
            }
            ajuste.setFk_usuarioId(this.ajusteview.usuario.getUsuarioId());
            ajuste.setAjusteid(0);
            DecimalFormat formato_decimal = new DecimalFormat("#########.##");
            formato_decimal.setMinimumFractionDigits(2);//set cantidad minima de digitos en conversion
            formato_decimal.setMaximumFractionDigits(2);
            if (ajusteview.radio_dias.isSelected()) {//si selecciona dias
                aux = ajusteview.txt_dias.getText().trim();
                if (aux.equals("")) {//si viene vacio el campo
                    ajusteview.label_error.setText("- Introduzca la Cantidad de Dias");
                    ajusteview.label_error.setVisible(true);
                    return null;
                } else {
                    try {
                        dia_v = Integer.parseInt(aux);
                        if (dia_v <= 0) {
                            ajusteview.label_error.setText("- Introduzca un Cantidad de Dias Mayor a 0");
                            ajusteview.label_error.setVisible(true);
                            return null;
                        } else {
                            if (dia_v > 180) {
                                ajusteview.label_error.setText("- Introduzca un Cantidad de Dias Menor a 180");
                                ajusteview.label_error.setVisible(true);
                                return null;
                            } else {
                                ajuste.setFactor((double) dia_v);
                                ajuste.setTiempo(true);
                            }
                        }
                    } catch (Exception e) {
                        ajusteview.label_error.setText("- Introduzca un Cantidad de Dias Valido");
                        ajusteview.label_error.setVisible(true);
                        return null;
                    }

                }
            } else {
                if (ajusteview.radio_monto.isSelected()) {
                    aux = ajusteview.txt_monto.getText().trim();
                    if (aux.equals("")) {
                        ajusteview.label_error.setText("- Introduzca el Monto");
                        ajusteview.label_error.setVisible(true);
                        return null;
                    } else {
                        try {

                            monto_v = Double.parseDouble(aux);
                            if (monto_v <= 0.00) {
                                ajusteview.label_error.setText("- Introduzca un Cantidad de Monto Mayor a 0");
                                ajusteview.label_error.setVisible(true);
                                return null;
                            } else {
                                if (monto_v > 20000.00) {
                                    ajusteview.label_error.setText("- Introduzca un Cantidad de Monto Menor a $20 000");
                                    ajusteview.label_error.setVisible(true);
                                    return null;
                                }
                                aux = formato_decimal.format(Double.parseDouble(aux));
                                aux = aux.replace(',', '.');
                                monto_v = Double.parseDouble(aux);
                                ajuste.setFactor(monto_v);
                                ajuste.setTiempo(false);
                            }
                        } catch (Exception e) {
                            ajusteview.label_error.setText("- Introduzca un Cantidad de Monto Valido");
                            ajusteview.label_error.setVisible(true);
                            return null;
                        }
                    }
                } else {
                    ajusteview.label_error.setText("- Seleccione Una Opcion de Tipo");
                    ajusteview.label_error.setVisible(true);
                    return null;
                }
            }




            if (!ajusteview.radio_agrega.isSelected() && !ajusteview.radio_descuenta.isSelected()) {
                ajusteview.label_error.setText("- Seleccione Si Agrega o Descuenta");
                ajusteview.label_error.setVisible(true);
                return null;
            } else {
                if (ajusteview.radio_descuenta.isSelected()) {
                    ajuste.setFactor((-1) * ajuste.getFactor());
                }
                ajuste.setFk_convenioId(ajusteview.p.getPracticanteId());

                if (ajusteview.periodo1.isSelected() == true) {
                    ajusteview.periodo = ajusteview.prefqm.fecha;
                }
                if (ajusteview.periodo2.isSelected() == true) {
                    ajusteview.periodo = ajusteview.prefqm.fecha2;
                }
                ajuste.setFk_periodoId(ajusteview.periodo.getCalendarioFacturacionPracticantesId());
            }
            aux = ajusteview.txt_comentario.getText().trim();
            if (aux.equals("")) {
                ajusteview.label_error.setText("- Introduzca un Comentario");
                ajusteview.label_error.setVisible(true);
                return null;
            } else {
                ajuste.setCometario(aux);
            }

        } catch (Exception e) {
            System.out.println("eRROROROROR-" + e.getMessage());
            return null;
        }
        return ajuste;


    }

    public void resetForm() {
        try {
            ajusteview.radio_dias.setSelected(false);
            ajusteview.radio_descuenta.setSelected(false);
            ajusteview.radio_monto.setSelected(false);
            ajusteview.radio_agrega.setSelected(false);
            ajusteview.txt_comentario.setText("");
            ajusteview.txt_dias.setText("");
            ajusteview.txt_monto.setText("");
            ajusteview.txt_dias.setText("");
            ajusteview.txt_monto.setText("");
            ajusteview.label_error.setVisible(false);
            ajusteview.label_error.setText("");
            ajusteview.txt_dias.setEnabled(false);
            ajusteview.txt_monto.setEnabled(false);
            ajusteview.label_error_tabla.setVisible(false);
            ajusteview.periodo1.setSelected(false);
            ajusteview.periodo2.setSelected(false);
        } catch (Exception e) {
        }

    }
}
